Skip to content

Prepare for release of PyNWB 4.0.0#2201

Merged
rly merged 10 commits into
devfrom
release-4.0.0
Jun 29, 2026
Merged

Prepare for release of PyNWB 4.0.0#2201
rly merged 10 commits into
devfrom
release-4.0.0

Conversation

@rly

@rly rly commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Release PR for PyNWB 4.0.0.

Minor changes:

ROS3 CI fix: The *-ros3 jobs failed with OSError: ... AWS region wasn't specified. Root cause is environment drift: HDF5 2.1.0 / h5py 3.16.0 (released between the last green dev run and this run) now require an explicit AWS region for the ROS3 driver. Fixed by passing aws_region="us-east-2" (DANDI Archive bucket region) at each ROS3 open site and adding an aws_region argument to validate().

Overlap with #2187 (Zarr validation): The aws_region addition here touches validate() / _validate_single_file / get_cached_namespaces_to_validate — the same code that #2187 refactors. However, I would like to pursue a different approach with regard to validate / get_cached_namespaces_to_validate that needs to propagate through major versions of HDMF and PyNWB. For now, this change forwards aws_region alongside the existing driver kwarg. validate() on a Zarr store remains broken on this branch (pre-existing).

Before merging:

  • Make sure all PRs to be included in this release have been merged to dev.
  • Major and minor releases: Update package versions in requirements.txt, requirements-dev.txt,
    requirements-doc.txt, requirements-opt.txt, and environment-ros3.yml to the latest versions,
    and update dependency ranges in pyproject.toml and minimums in requirements-min.txt as needed.
    Run pip install pur && pur -r requirements-dev.txt -r requirements.txt -r requirements-opt.txt
    and manually update environment-ros3.yml. Done via pur; requirements.txt/requirements-dev.txt were already current. numpy/pandas kept within hdmf and pandas<3 ceilings. requirements-min.txt and pyproject.toml ranges left unchanged (no change needed). Not yet validated by the test/CI steps below.
  • Check legal file dates and information in Legal.txt, license.txt, README.rst, docs/source/conf.py,
    and any other locations as needed Copyright year updated 2017-2025 → 2017-2026.
  • Update pyproject.toml as needed No change needed; version is derived dynamically from the git tag.
  • Update README.rst as needed Copyright year updated.
  • Update src/pynwb/nwb-schema submodule as needed. Check the version number and commit SHA
    manually. Make sure we are using the latest release and not the latest commit on the main branch. Already at the 2.10.0 release tag.
  • Update changelog (set release date) in CHANGELOG.md and any other docs as needed Left as (Upcoming) until the release date is known.
  • Run tests locally including gallery, validation, and streaming tests, and inspect all warnings and outputs
    (python test.py -v -p -i -b -w -r > out.txt 2>&1). Try to remove all warnings.
  • Test docs locally and inspect all warnings and outputs cd docs; make clean && make html
  • After pushing this branch to GitHub, manually trigger the "Run all tests" GitHub Actions workflow on this
    branch by going to https://github.com/NeurodataWithoutBorders/pynwb/actions/workflows/run_all_tests.yml, selecting
    "Run workflow" on the right, selecting this branch, and clicking "Run workflow". Make sure all tests pass.
  • Check that the readthedocs build for this PR succeeds (see the PR check)

After merging:

  1. Create release by following steps in docs/source/make_a_release.rst or use alias git pypi-release [tag] if set up
  2. After the CI bot creates the new release (wait ~10 min), update the release notes on the
    GitHub releases page with the changelog
  3. Check that the readthedocs "stable" build runs and succeeds
  4. Either monitor conda-forge/pynwb-feedstock for the
    regro-cf-autotick-bot bot to create a PR updating the version of HDMF to the latest PyPI release, usually within
    24 hours of release, or manually create a PR updating recipe/meta.yaml with the latest version number
    and SHA256 retrieved from PyPI > PyNWB > Download Files > View hashes for the .tar.gz file. Re-render and update
    dependencies as needed.

🤖 Generated with Claude Code

rly and others added 2 commits June 23, 2026 01:28
Update the copyright year from 2017-2025 to 2017-2026 in Legal.txt,
license.txt, README.rst, and docs/source/conf.py.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump pinned dependency versions to the latest compatible releases via `pur`
on requirements.txt, requirements-dev.txt, and requirements-opt.txt
(requirements.txt and requirements-dev.txt were already current). Sync the
matching linkml-runtime pin in requirements-doc.txt and manually update
environment-ros3.yml, keeping its shared pins consistent with the resolved
versions (numpy and pandas stay within hdmf's and pynwb's ceilings) and
bumping the ros3-only matplotlib and dandi to latest.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.99%. Comparing base (ed4388f) to head (d1cc66a).

Additional details and impacted files
@@           Coverage Diff           @@
##              dev    #2201   +/-   ##
=======================================
  Coverage   95.99%   95.99%           
=======================================
  Files          30       30           
  Lines        2970     2970           
  Branches      431      431           
=======================================
  Hits         2851     2851           
  Misses         67       67           
  Partials       52       52           
Flag Coverage Δ
integration 74.27% <100.00%> (ø)
unit 86.70% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

rly and others added 7 commits June 29, 2026 01:38
# Conflicts:
#	requirements-doc.txt
#	requirements-opt.txt
HDF5 2.1.0 (h5py 3.16.0) requires the AWS region to be specified when
opening an S3 URL with the ros3 driver, which broke the ROS3 streaming
tests and the streaming gallery example. Pass aws_region="us-east-2"
(the DANDI Archive S3 bucket region) at each ros3 open site, and add an
aws_region argument to validate() so it can be forwarded when validating
a file opened with the ros3 driver.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refine the get_external_resources docstring and HERD tutorial wording to
describe the linked vs stored HERD behavior, and add tqdm to the streaming
example's install instructions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The merge left validate() requesting "aws_region" from getargs without
binding it to a variable, so getargs returned 7 values into 6 targets.
This raised "too many values to unpack" on every validate() call and
left aws_region undefined where it is forwarded to the io kwargs and
get_cached_namespaces_to_validate().

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rly rly marked this pull request as ready for review June 29, 2026 22:43
@rly rly requested a review from oruebel June 29, 2026 22:43
Comment thread CHANGELOG.md Outdated

@oruebel oruebel left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

@rly rly merged commit 497132b into dev Jun 29, 2026
26 of 27 checks passed
@rly rly deleted the release-4.0.0 branch June 29, 2026 23:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants